package com.zwh.se.collection.comparable_comparator;

/**
 * @author yexi
 * jdk很多的类内部都有一个 compareTo 方法来比较元素的大小关系,而这个方法就来源于java.util.Comparable这个接口
 * 该方法主要是用来比较大小用的,那么它常用的场景有哪些呢?
 * 没错就是排序。因为对象不像基本数据类型,有通过值就能比较大小的概念(总不可能用地址来比较)。
 * 所以比如八大包装类和String,TreeSet这样的就会调用compareTo方法来比较元素的大小关系,然后将集合元素按照一定顺序来排列。
 * <p>
 * Comparable是一个接口,实现了它的类可以通过重写里面的compareTo方法来自定义自己的比较规则。
 * 由于Comparable必须要实现接口,并且只能通过内部的compareTo方法来实现比较,所以我们一般称它为"内部比较器"
 */
public class Student implements Comparable<Student> {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //比较规则(比如现在需求是只根据年龄来比,由小到大排序)
    @Override
    public int compareTo(Student o) {
        //通过名字来比较(从这里可以看到如果要比较的是另外一个类的话,也可以用该类实现的compareTo规则)
        //return this.name.compareTo(o.name);
        //通过年龄来比较
        return Integer.compare(this.age, o.age);
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + "]";
    }

    public static void main(String[] args) {
        Student s1 = new Student("alili", 14);
        Student s2 = new Student("alili", 15);
        Student s3 = new Student("bnana", 15);
        System.out.println(s1.compareTo(s2));
        System.out.println(s2.compareTo(s1));
        System.out.println(s2.compareTo(s3));
    }
}